home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_100 / 130_01 / makeparm.c < prev    next >
Text File  |  1985-03-09  |  5KB  |  243 lines

  1.  
  2.  
  3.  
  4. #include "bdscio.h"
  5. #include "makedef.h"
  6.  
  7.  
  8.  
  9.  
  10. argument( linebuf, boot, cpmfil, bios, parm )
  11. char *linebuf, *boot, *cpmfil, *bios ;
  12. unsigned parm[] ;
  13. {
  14. char file[20], *line, *gettok() ;
  15. char token[20], n ;
  16.  
  17.  
  18.  
  19. line = linebuf ;
  20.  
  21. for(n=0;n<MAXVECTOR;n++)parm[n] = 0 ;
  22. parm[ISBOOT] = FALSE ;
  23. line = gettok( line, boot );
  24. if(*boot == '-' || line == EOL)xusage();
  25. newext( boot, ".HEX" );
  26. if(lookup( boot ) == FALSE){
  27.     strcpy( cpmfil, boot );
  28.     newext( cpmfil, ".COM" );
  29.     }
  30. else {
  31.     line = gettok( line, cpmfil );
  32.     if(*cpmfil == '-' || line == EOL)xusage();
  33.     newext( cpmfil, ".COM" );
  34.     parm[ISBOOT] = TRUE ;
  35.      }
  36. line = gettok( line, bios );
  37. if(*bios == '-' || line == EOL)xusage();
  38. newext( bios, ".HEX" );
  39. while((line = gettok( line, token )) != 0){
  40.     while(token[0] != '-'){
  41.         printf("Can't figure %s out, ignored.\n", token );
  42.         if((line = gettok( line, token )) == 0)return ;
  43.         }
  44.     switch (token[1]) {
  45.       case 'A' : parm[AUTOPATCH] = TRUE ; break ;
  46.       case 'S' : parm[NOCHECK] = TRUE ; break ;
  47.       case 'T' : parm[TEST] = TRUE ; break ;
  48.       case 'C' : parm[DIRECTBOOT] = TRUE ; break ;
  49.       case 'I' :
  50.         parm[IMMEDIATE] = TRUE ;
  51.         gettok( line, token );
  52.         if(token[0] <= 'P' && token[0] >= 'A'){
  53.             parm[DRIVE] = token[0] - 'A' ;
  54.             if((line = gettok( line, token )) == 0)return;
  55.             }
  56.         else {
  57.             parm[IMMEDIATE] = FALSE ;
  58.             printf("Ignoring immediate option due to illegal syntax\n");
  59.             printf("Output sent to disk file\n");
  60.              }
  61.         break ;
  62.       case 'P' :
  63.         if((line = gettok( line, token )) == 0)return ;
  64.         strcat( token, "H" );
  65.         parm[PATCHADRESS] = htoi( token );
  66.         n = 0 ;
  67.         while(gettok(line,token) != 0){
  68.             if(token[0] == '-')break ;
  69.             if(n > MAXPATCH)break ;
  70.             strcat( token, "H" );
  71.             parm[PATCHBYTE + n] = htoi( token );
  72.             line = gettok( line, token );
  73.             n++ ;
  74.             }
  75.         parm[PATCH] = TRUE ;
  76.         parm[PATCHBYTE + n] = -1 ;
  77.         break ;
  78.       default   :
  79.         printf("%c is an illegal option, ignored.\n",token[1] );
  80.       }
  81.     }
  82. return;
  83. }
  84.  
  85.  
  86.  
  87.  
  88.  
  89.  
  90. char *gettok( line, token )
  91. char *line, *token ;
  92. {
  93.     char *p, c, n ;
  94.  
  95.     while(*line == ' ')line++ ;
  96.     p = line ;
  97.     if(*line == EOL)return(EOL);
  98.     if(*line == '-'){
  99.         p += 2 ;
  100.         c = *p ;
  101.         *p = 0 ;
  102.         strcpy( token, line );
  103.         *p = c ;
  104.         }
  105.     else {
  106.         while(*p != ' ' && *p != EOL)p++ ;
  107.         if(*p == EOL)*(p + 1) = EOL ;
  108.         *p = EOL ;
  109.         strcpy( token, line );
  110.         *p = ' ' ;
  111.          }
  112.     return( p );
  113. }
  114.  
  115.  
  116.  
  117.  
  118.  
  119.  
  120. look( filename, ext )
  121. char *filename, *ext ;
  122. {
  123.     char v[20] ;
  124.  
  125.     strcpy( v, filename );
  126.     newext( v, ext );
  127.     return( lookup( v ) );
  128. }
  129.  
  130.  
  131. isext( name )
  132. char *name ;
  133. {
  134.     char n ;
  135.     
  136.     for(n = 0 ; n < 12 && name[n] != 0 ; n++ )
  137.         if(name[n] == '.')return(TRUE);
  138.     return(FALSE);
  139. }
  140.  
  141.  
  142.  
  143.  
  144. ishex( name )
  145. char *name ;
  146. {
  147.     char v[20];
  148.  
  149.     if(isext( name ) == FALSE)return(FALSE);
  150.     strcpy( v, name );
  151.     newext( v, ".COM" );
  152.     if(strcmp( name, v ) == 0)return(TRUE);
  153.     else return(FALSE);
  154. }
  155.  
  156.  
  157.  
  158. iscom( name )
  159. char *name ;
  160. {
  161.     char v[20];
  162.  
  163.     if(isext( name ) == FALSE)return(FALSE);
  164.     strcpy( v, name );
  165.     newext( v, ".COM" );
  166.     if(strcmp( name, v ) == 0)return(TRUE);
  167.     else return(FALSE);
  168. }
  169.  
  170.  
  171.  
  172. usage(){
  173.     printf("\n");
  174.     printf("Usage: MAKESYS [bootfile] cpmfile biosfile [option]...\n");
  175.     printf("       Filenames may be given without extensions, boot and bios\n");
  176.     printf("       files taken as .HEX and cpmfile as .COM\n");
  177.     printf("       Options:\n");
  178.     printf("         -s           Suppress adress check on bios\n");
  179.     printf("         -p adress byte...   Patch up to 16 bytes into the\n");
  180.     printf("                      relative adress given (same as DDT adress)\n");
  181.     printf("         -i drive     Do a direct sysgen on destination drive\n");
  182.     printf("         -a           Auto patch to make user 0 public access\n");
  183.     printf("         -c           Do an automatic cold boot after sysgen\n");
  184.     printf("\n");
  185. }
  186.  
  187.  
  188.  
  189. /*
  190.    Lookup returns TRUE if the filename exists
  191.    on the disk, FALSE otherwise.
  192. */
  193.  
  194. lookup( name )
  195. char *name ;
  196. {
  197.     char fcb[45];
  198.  
  199.     if(setfcb(fcb,name) == ERROR)return(ERROR);
  200.     bdos(26,0x9000);
  201.     if(bdos(17,fcb) > 3)return(FALSE);
  202.     else return(TRUE);
  203. }
  204.  
  205.  
  206.  
  207.  
  208. /*
  209.     Newext puts a new extension (ext[]) onto
  210.     filename in name[].
  211. */
  212.  
  213. newext( name, ext )
  214. char *name, *ext ;
  215. {
  216.     char k, *p ;
  217.  
  218.     p = name ;
  219.     for( k = 0 ; k < 8 ; k++ )
  220.         if(*p == '.')break ;
  221.         else p++ ;
  222.     *p = 0 ;
  223.     strcat( name, ext );
  224. }
  225.  
  226.  
  227.  
  228.  
  229. htoi( string )
  230. char *string ;
  231. {
  232.     return( cbin( string ) );
  233. }
  234.  
  235.  
  236.  
  237.  
  238.  
  239. xusage(){ usage(); exit(); }
  240.  
  241.  
  242.  
  243.